﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<vector>
using namespace std;

// C++11的方法
class Base final
{
public:
    void func5() { cout << "Base::func5" << endl; }
protected:
    int a = 1;

private:
    // C++98的方法
    /*Base()
    {}*/
};

class Derive :public Base
{
    void func4() { cout << "Derive::func4" << endl; }
protected:
    int b = 2;
};

int main()
{
    Base b;
    Derive d;

    return 0;
}

//class Person
//{
//protected:
//	string _name; // 姓名
//	string _sex; // 性别
//	int _age; // 年龄
//};
//class Student : public Person
//{
//public:
//	int _No; // 学号
//};
//int main()
//{
//	Student sobj;
//	// 1.派⽣类对象可以赋值给基类的指针/引⽤
//	Person* pp = &sobj;
//	Person& rp = sobj;
//	// ⽣类对象可以赋值给基类的对象是通过调⽤后⾯会讲解的基类的拷⻉构造完成的
//	Person pobj = sobj;
//	//2.基类对象不能赋值给派⽣类对象，这⾥会编译报错
//	sobj = pobj;
//	return 0;
//}



//namespace LF
//{
//	//stack 和 vector 的关系，既符合 is-a ， 也符合 has-a
//	template<class T>
//	class stack :public std::vector<T>
//	{
//	public:
//		void push(const T& x)
//		{
//			//基类是类模板时，需要指定一下类域
//			//否则编译报错:error C3861: “push_back”: 找不到标识符
//			//因为stack<int>实例化时，也实例化vector<int>了
//			//但是模板是按需实例化，push_back等成员函数未实例化，所以找不到
//			vector<T>::push_back(x);
//		}
//		void pop()
//		{
//			vector<T>::pop_back();
//		}
//		const T& top()
//		{
//			return vector<T>::back();
//		}
//		bool empty()
//		{
//			return vector<T>::empty();
//		}
//	};
//}
//
//int main()
//{
//	LF::stack<int> st;
//	st.push(1);
//	st.push(2);
//	st.push(3);
//
//	while (!st.empty())
//	{
//		cout << st.top() << " ";
//		st.pop();
//	}
//	cout << endl;
//
//	return 0;
//}



//class Person
//{
//public:
//	void Print()
//	{
//		cout << _name << endl;
//	}
//protected:
//	string _name;		//姓名
//private:
//	int _age;			//年龄
//};
//
////class Student : protected Person
////class Student : private Person
//class Student : public Person
//{
//protected:
//	int _stunum;
//};


//class Person
//{
//public:
//	//进入校园/图书馆/实验室刷二维码等身份认证
//	void identity()
//	{
//		cout << "void identity()" << _name << endl;
//	}
//protected:
//	string _name = "张三";   //姓名
//	string _address;		//地址
//	string _tel;			//电话
//	int _age = 18;			//年龄
//};
//
//class Student : public Person
//{
//public:
//	//学习
//	void study()
//	{
//		// ...
//	}
//
//protected:
//	int _stuid;			//学号
//};
//
//class Teather :public Person
//{
//public:
//	//授课
//	void teaching()
//	{
//		//...
//	}
//
//protected:
//	string title;		//职称
//};
//
//int main()
//{
//	Student s;
//	Teather t;
//
//	s.identity();
//	t.identity();
//
//	return 0;
//}
